// readonly 修饰符：首先是一个关键字，对类中的属性进行修饰，该属性成员不能在外部被随意修改！
(() => {
    // readonly 修饰类中的成员属性操作！
    // // 定义一个类
    // class Person {
    //     // readonly name: string = '大甜甜'
    //     readonly name: string
    //     constructor(name: string = '大甜甜') {
    //         this.name = name
    //     }

    //     sayHello() {
    //         console.log('考你急哇', this.name);
    //         // 类中的普通方法中，也是不能修改readonly修饰的成员属性值
    //         // this.name = '小哥'
    //     }
    // }

    // const p = new Person('小甜甜')
    // console.log(p);
    // console.log(p.name);
    // 此时无法修改，因为name属性时只读的！
    // p.name = '大哥'
    // console.log(p.name);

    console.log('------------------------------------------');


    // 定义一个类
    class Person {

        // 构造函数的name参数，一旦使用readonly进行修饰后，那么该name参数可以叫参数属性
        // 构造函数中的name参数，一旦使用readonly进行修饰后，那么Person中就有了name属性成员
        // constructor(readonly name: string = '大甜甜') {
        //     this.name = name
        // }

        // constructor(public name: string = '大甜甜') {
        //     this.name = name
        // }

        // constructor(private name: string = '大甜甜') {
        //     this.name = name
        // }

        constructor(protected name: string = '大甜甜') {
            this.name = name
        }
    }

    // 实例化对象
    const p = new Person('小甜甜')
    console.log(p);
    console.log(p.name);


})()